<!DOCTYPE html>
<html lang="zh-CN">
<head>
  <meta charset="UTF-8">
  <meta name="viewport" content="width=device-width, initial-scale=1.0">
  <title>Python开发工程师简历</title>
  <style>
    /* 基础样式 */
    :root {
      --primary-color: #3776ab; /* Python蓝 */
      --secondary-color: #ffd343; /* Python黄 */
      --dark-color: #222222;
      --light-color: #f8f8f8;
      --text-color: #333333;
      --text-light: #ffffff;
      --accent-color: #44b78b; /* 辅助绿色 */
      --transition: all 0.3s ease;
    }
    
    * {
      margin: 0;
      padding: 0;
      box-sizing: border-box;
      font-family: 'Segoe UI', 'Microsoft YaHei', sans-serif;
    }
    
    body {
      background-color: var(--light-color);
      color: var(--text-color);
      line-height: 1.6;
      transition: var(--transition);
    }
    
    body.dark-mode {
      background-color: var(--dark-color);
      color: var(--text-light);
    }
    
    .container {
      max-width: 1200px;
      margin: 0 auto;
      padding: 20px;
      display: grid;
      grid-template-columns: 300px 1fr;
      gap: 30px;
      position: relative;
    }
    
    @media (max-width: 768px) {
      .container {
        grid-template-columns: 1fr;
      }
    }
    
    /* 侧边栏样式 */
    .sidebar {
      background: var(--primary-color);
      color: var(--text-light);
      padding: 30px;
      border-radius: 10px;
      box-shadow: 0 5px 15px rgba(0, 0, 0, 0.1);
      position: relative;
      overflow: hidden;
      z-index: 1;
    }
    
    .sidebar::before {
      content: '';
      position: absolute;
      top: 0;
      left: 0;
      width: 100%;
      height: 100%;
      background: url('data:image/svg+xml;utf8,<svg xmlns="http://www.w3.org/2000/svg" width="100" height="100" viewBox="0 0 100 100"><rect x="0" y="0" width="100" height="100" fill="none" stroke="rgba(255,255,255,0.05)" stroke-width="2"/></svg>');
      z-index: -1;
      opacity: 0.5;
    }
    
    .profile {
      text-align: center;
      margin-bottom: 30px;
    }
    
    .profile-img {
      width: 150px;
      height: 150px;
      border-radius: 50%;
      object-fit: cover;
      border: 5px solid rgba(255, 255, 255, 0.2);
      margin-bottom: 20px;
      transition: var(--transition);
    }
    
    .profile-img:hover {
      transform: scale(1.05);
      border-color: var(--secondary-color);
    }
    
    .name {
      font-size: 1.8rem;
      font-weight: 600;
      margin-bottom: 5px;
    }
    
    .title {
      font-size: 1rem;
      color: rgba(255, 255, 255, 0.8);
      margin-bottom: 20px;
      position: relative;
      display: inline-block;
    }
    
    .title::after {
      content: '';
      position: absolute;
      bottom: -5px;
      left: 25%;
      width: 50%;
      height: 2px;
      background: var(--secondary-color);
    }
    
    .contact-info {
      margin-bottom: 30px;
    }
    
    .contact-item {
      display: flex;
      align-items: center;
      margin-bottom: 15px;
      transition: var(--transition);
    }
    
    .contact-item:hover {
      transform: translateX(5px);
    }
    
    .contact-icon {
      width: 30px;
      height: 30px;
      background: rgba(255, 255, 255, 0.1);
      border-radius: 50%;
      display: flex;
      align-items: center;
      justify-content: center;
      margin-right: 15px;
      font-size: 14px;
      transition: var(--transition);
    }
    
    .contact-item:hover .contact-icon {
      background: var(--secondary-color);
      color: var(--primary-color);
    }
    
    .contact-text {
      font-size: 0.9rem;
      color: rgba(255, 255, 255, 0.9);
    }
    
    .section-title {
      font-size: 1.2rem;
      margin-bottom: 20px;
      position: relative;
      padding-bottom: 10px;
      color: var(--text-light);
    }
    
    .section-title::after {
      content: '';
      position: absolute;
      bottom: 0;
      left: 0;
      width: 30px;
      height: 3px;
      background: var(--secondary-color);
      transition: var(--transition);
    }
    
    .sidebar-section:hover .section-title::after {
      width: 50px;
    }
    
    /* 技能样式 */
    .skill-item {
      margin-bottom: 15px;
    }
    
    .skill-name {
      display: flex;
      justify-content: space-between;
      margin-bottom: 5px;
      font-size: 0.9rem;
      color: rgba(255, 255, 255, 0.9);
    }
    
    .skill-bar {
      height: 8px;
      background: rgba(255, 255, 255, 0.1);
      border-radius: 4px;
      overflow: hidden;
      position: relative;
    }
    
    .skill-progress {
      height: 100%;
      background: var(--secondary-color);
      border-radius: 4px;
      position: absolute;
      top: 0;
      left: 0;
      width: 0;
      transition: width 1.5s cubic-bezier(0.165, 0.84, 0.44, 1);
    }
    
    /* 主要内容样式 */
    .main-content {
      background: white;
      border-radius: 10px;
      padding: 40px;
      box-shadow: 0 5px 15px rgba(0, 0, 0, 0.05);
      transition: var(--transition);
    }
    
    body.dark-mode .main-content {
      background: #333;
    }
    
    .main-section {
      margin-bottom: 40px;
      opacity: 0;
      transform: translateY(20px);
      transition: opacity 0.5s ease, transform 0.5s ease;
    }
    
    .main-section.visible {
      opacity: 1;
      transform: translateY(0);
    }
    
    .main-title {
      font-size: 1.8rem;
      color: var(--primary-color);
      margin-bottom: 25px;
      position: relative;
      display: inline-block;
    }
    
    body.dark-mode .main-title {
      color: var(--secondary-color);
    }
    
    .main-title::after {
      content: '';
      position: absolute;
      bottom: -5px;
      left: 0;
      width: 100%;
      height: 3px;
      background: var(--primary-color);
    }
    
    body.dark-mode .main-title::after {
      background: var(--secondary-color);
    }
    
    /* 关于我样式 */
    .about-content {
      font-size: 1rem;
      line-height: 1.8;
      margin-bottom: 20px;
    }
    
    .code-snippet {
      background: #f5f5f5;
      padding: 15px;
      border-radius: 5px;
      font-family: 'Consolas', 'Monaco', monospace;
      font-size: 0.9rem;
      margin: 20px 0;
      position: relative;
      overflow: hidden;
      transition: var(--transition);
    }
    
    body.dark-mode .code-snippet {
      background: #222;
    }
    
    .code-snippet::before {
      content: 'Python';
      position: absolute;
      top: 0;
      right: 0;
      background: var(--primary-color);
      color: white;
      padding: 2px 10px;
      font-size: 0.8rem;
      border-bottom-left-radius: 5px;
    }
    
    .code-snippet:hover {
      transform: translateY(-5px);
      box-shadow: 0 5px 15px rgba(0, 0, 0, 0.1);
    }
    
    .keyword {
      color: #0000ff;
    }
    
    body.dark-mode .keyword {
      color: #569cd6;
    }
    
    .string {
      color: #a31515;
    }
    
    body.dark-mode .string {
      color: #ce9178;
    }
    
    .comment {
      color: #008000;
    }
    
    body.dark-mode .comment {
      color: #6a9955;
    }
    
    /* 时间线样式 */
    .timeline {
      position: relative;
      padding-left: 30px;
    }
    
    .timeline::before {
      content: '';
      position: absolute;
      top: 0;
      left: 0;
      width: 2px;
      height: 100%;
      background: rgba(0, 0, 0, 0.1);
    }
    
    body.dark-mode .timeline::before {
      background: rgba(255, 255, 255, 0.1);
    }
    
    .timeline-item {
      position: relative;
      margin-bottom: 30px;
      padding-bottom: 20px;
    }
    
    .timeline-item::before {
      content: '';
      position: absolute;
      top: 0;
      left: -30px;
      width: 16px;
      height: 16px;
      border-radius: 50%;
      background: white;
      border: 2px solid var(--primary-color);
      z-index: 1;
      transition: var(--transition);
    }
    
    body.dark-mode .timeline-item::before {
      background: #333;
      border-color: var(--secondary-color);
    }
    
    .timeline-item:hover::before {
      background: var(--primary-color);
      transform: scale(1.2);
    }
    
    body.dark-mode .timeline-item:hover::before {
      background: var(--secondary-color);
    }
    
    .timeline-title {
      font-size: 1.2rem;
      font-weight: 600;
      color: var(--primary-color);
      margin-bottom: 5px;
    }
    
    body.dark-mode .timeline-title {
      color: var(--secondary-color);
    }
    
    .timeline-subtitle {
      font-size: 1rem;
      color: var(--accent-color);
      margin-bottom: 10px;
      font-weight: 500;
    }
    
    .timeline-date {
      font-size: 0.9rem;
      color: #777;
      margin-bottom: 15px;
    }
    
    body.dark-mode .timeline-date {
      color: #aaa;
    }
    
    .timeline-content {
      font-size: 0.95rem;
      line-height: 1.6;
      color: #555;
    }
    
    body.dark-mode .timeline-content {
      color: #ddd;
    }
    
    /* 项目卡片样式 */
    .project-grid {
      display: grid;
      grid-template-columns: repeat(auto-fill, minmax(300px, 1fr));
      gap: 25px;
    }
    
    .project-card {
      background: #f9f9f9;
      border-radius: 10px;
      overflow: hidden;
      box-shadow: 0 5px 15px rgba(0, 0, 0, 0.05);
      transition: var(--transition);
      position: relative;
      z-index: 1;
      border-left: 4px solid var(--primary-color);
    }
    
    body.dark-mode .project-card {
      background: #2a2a2a;
      border-left-color: var(--secondary-color);
    }
    
    .project-card:hover {
      transform: translateY(-10px);
      box-shadow: 0 15px 30px rgba(0, 0, 0, 0.1);
    }
    
    .project-content {
      padding: 25px;
    }
    
    .project-title {
      font-size: 1.2rem;
      font-weight: 600;
      margin-bottom: 10px;
      color: var(--primary-color);
    }
    
    body.dark-mode .project-title {
      color: var(--secondary-color);
    }
    
    .project-tech {
      display: flex;
      flex-wrap: wrap;
      gap: 8px;
      margin-bottom: 15px;
    }
    
    .tech-tag {
      font-size: 0.8rem;
      padding: 3px 10px;
      background: rgba(55, 118, 171, 0.1);
      color: var(--primary-color);
      border-radius: 15px;
      transition: var(--transition);
    }
    
    body.dark-mode .tech-tag {
      background: rgba(255, 211, 67, 0.1);
      color: var(--secondary-color);
    }
    
    .project-card:hover .tech-tag {
      background: rgba(55, 118, 171, 0.2);
    }
    
    body.dark-mode .project-card:hover .tech-tag {
      background: rgba(255, 211, 67, 0.2);
    }
    
    .project-description {
      font-size: 0.9rem;
      line-height: 1.6;
      color: #555;
    }
    
    body.dark-mode .project-description {
      color: #ddd;
    }
    
    /* 数据可视化 */
    .metrics-container {
      display: flex;
      flex-wrap: wrap;
      justify-content: space-between;
      margin-bottom: 30px;
      gap: 15px;
    }
    
    .metric-item {
      text-align: center;
      flex: 1;
      min-width: 120px;
      padding: 15px;
      background-color: #f9f9f9;
      border-radius: 10px;
      box-shadow: 0 3px 10px rgba(0, 0, 0, 0.05);
      transition: var(--transition);
    }
    
    body.dark-mode .metric-item {
      background-color: #2a2a2a;
    }
    
    .metric-item:hover {
      transform: translateY(-5px);
      box-shadow: 0 8px 15px rgba(0, 0, 0, 0.1);
    }
    
    .metric-value {
      font-size: 2rem;
      font-weight: 700;
      color: var(--primary-color);
      margin-bottom: 5px;
    }
    
    body.dark-mode .metric-value {
      color: var(--secondary-color);
    }
    
    .metric-label {
      font-size: 0.9rem;
      color: #666;
    }
    
    body.dark-mode .metric-label {
      color: #aaa;
    }
    
    /* 主题切换按钮 */
    .theme-switch {
      position: fixed;
      bottom: 30px;
      right: 30px;
      width: 50px;
      height: 50px;
      border-radius: 50%;
      background: var(--primary-color);
      color: white;
      display: flex;
      align-items: center;
      justify-content: center;
      cursor: pointer;
      box-shadow: 0 5px 15px rgba(0, 0, 0, 0.1);
      z-index: 1000;
      transition: var(--transition);
      font-size: 1.5rem;
    }
    
    .theme-switch:hover {
      transform: rotate(45deg);
    }
    
    /* 粒子背景 */
    .particles-container {
      position: fixed;
      top: 0;
      left: 0;
      width: 100%;
      height: 100%;
      pointer-events: none;
      z-index: -1;
    }
    
    .particle {
      position: absolute;
      background-color: rgba(55, 118, 171, 0.3);
      border-radius: 50%;
      pointer-events: none;
    }
    
    body.dark-mode .particle {
      background-color: rgba(255, 211, 67, 0.3);
    }
    
    /* 打印样式 */
    @media print {
      .theme-switch, .particles-container {
        display: none !important;
      }
      
      body, body.dark-mode {
        background-color: white;
        color: black;
      }
      
      .container {
        display: block;
        max-width: 100%;
        margin: 0;
        padding: 0;
      }
      
      .sidebar, body.dark-mode .sidebar {
        background: #f0f0f0;
        color: black;
        page-break-after: always;
        width: 100%;
        border-radius: 0;
      }
      
      .main-content, body.dark-mode .main-content {
        background: white;
        box-shadow: none;
        padding: 20px 0;
        border-radius: 0;
      }
      
      .main-title, body.dark-mode .main-title,
      .timeline-title, body.dark-mode .timeline-title,
      .project-title, body.dark-mode .project-title {
        color: black;
      }
      
      .main-title::after, body.dark-mode .main-title::after {
        background: black;
      }
      
      .timeline::before {
        background: #ddd;
      }
      
      .timeline-item::before {
        background: white;
        border-color: black;
      }
      
      .project-card, body.dark-mode .project-card {
        break-inside: avoid;
        background: white;
        box-shadow: none;
        border: 1px solid #eee;
      }
      
      .tech-tag, body.dark-mode .tech-tag {
        background: #f0f0f0;
        color: black;
      }
      
      .metric-item, body.dark-mode .metric-item {
        background: white;
        box-shadow: none;
        border: 1px solid #eee;
      }
      
      .metric-value, body.dark-mode .metric-value {
        color: black;
      }
    }
  </style>
</head>
<body>
  <div class="particles-container" id="particles"></div>
  <div class="theme-switch" id="themeSwitch">🌓</div>
  
  <div class="container">
    <div class="sidebar">
      <div class="profile">
        <img class="profile-img" src="https://gr-test.oss-cn-shenzhen.aliyuncs.com/02a0271622fba72d55334191e540f2793cee0eee8227010727b0ad469bd8c063.png" alt="个人照片">
        <h1 class="name">张三</h1>
        <p class="title">Python开发工程师</p>
      </div>
      
      <div class="contact-info">
        <div class="contact-item">
          <div class="contact-icon">📧</div>
          <div class="contact-text">zhangsan@example.com</div>
        </div>
        <div class="contact-item">
          <div class="contact-icon">📱</div>
          <div class="contact-text">13812345678</div>
        </div>
        <div class="contact-item">
          <div class="contact-icon">📍</div>
          <div class="contact-text">北京市海淀区</div>
        </div>
        <div class="contact-item">
          <div class="contact-icon">🔗</div>
          <div class="contact-text">github.com/zhangsan</div>
        </div>
      </div>
      
      <div class="sidebar-section">
        <h2 class="section-title">技术技能</h2>
        <div class="skill-item">
          <div class="skill-name">
            <span>Python</span>
            <span>95%</span>
          </div>
          <div class="skill-bar">
            <div class="skill-progress" data-width="95"></div>
          </div>
        </div>
        <div class="skill-item">
          <div class="skill-name">
            <span>Django</span>
            <span>90%</span>
          </div>
          <div class="skill-bar">
            <div class="skill-progress" data-width="90"></div>
          </div>
        </div>
        <div class="skill-item">
          <div class="skill-name">
            <span>Flask</span>
            <span>85%</span>
          </div>
          <div class="skill-bar">
            <div class="skill-progress" data-width="85"></div>
          </div>
        </div>
        <div class="skill-item">
          <div class="skill-name">
            <span>FastAPI</span>
            <span>80%</span>
          </div>
          <div class="skill-bar">
            <div class="skill-progress" data-width="80"></div>
          </div>
        </div>
        <div class="skill-item">
          <div class="skill-name">
            <span>数据分析 (Pandas/NumPy)</span>
            <span>85%</span>
          </div>
          <div class="skill-bar">
            <div class="skill-progress" data-width="85"></div>
          </div>
        </div>
        <div class="skill-item">
          <div class="skill-name">
            <span>机器学习 (Scikit-learn)</span>
            <span>75%</span>
          </div>
          <div class="skill-bar">
            <div class="skill-progress" data-width="75"></div>
          </div>
        </div>
      </div>
      
      <div class="sidebar-section">
        <h2 class="section-title">其他技能</h2>
        <div class="skill-item">
          <div class="skill-name">
            <span>HTML/CSS/JavaScript</span>
            <span>80%</span>
          </div>
          <div class="skill-bar">
            <div class="skill-progress" data-width="80"></div>
          </div>
        </div>
        <div class="skill-item">
          <div class="skill-name">
            <span>SQL/数据库设计</span>
            <span>85%</span>
          </div>
          <div class="skill-bar">
            <div class="skill-progress" data-width="85"></div>
          </div>
        </div>
        <div class="skill-item">
          <div class="skill-name">
            <span>Docker/容器化</span>
            <span>75%</span>
          </div>
          <div class="skill-bar">
            <div class="skill-progress" data-width="75"></div>
          </div>
        </div>
        <div class="skill-item">
          <div class="skill-name">
            <span>Git/版本控制</span>
            <span>90%</span>
          </div>
          <div class="skill-bar">
            <div class="skill-progress" data-width="90"></div>
          </div>
        </div>
      </div>
      
      <div class="sidebar-section">
        <h2 class="section-title">语言能力</h2>
        <div class="skill-item">
          <div class="skill-name">
            <span>中文（母语）</span>
            <span>100%</span>
          </div>
          <div class="skill-bar">
            <div class="skill-progress" data-width="100"></div>
          </div>
        </div>
        <div class="skill-item">
          <div class="skill-name">
            <span>英语（流利）</span>
            <span>85%</span>
          </div>
          <div class="skill-bar">
            <div class="skill-progress" data-width="85"></div>
          </div>
        </div>
      </div>
      
      <div class="sidebar-section">
        <h2 class="section-title">个人特质</h2>
        <div class="skill-item">
          <div class="skill-name">
            <span>解决问题能力</span>
            <span>95%</span>
          </div>
          <div class="skill-bar">
            <div class="skill-progress" data-width="95"></div>
          </div>
        </div>
        <div class="skill-item">
          <div class="skill-name">
            <span>团队协作</span>
            <span>90%</span>
          </div>
          <div class="skill-bar">
            <div class="skill-progress" data-width="90"></div>
          </div>
        </div>
        <div class="skill-item">
          <div class="skill-name">
            <span>自主学习</span>
            <span>95%</span>
          </div>
          <div class="skill-bar">
            <div class="skill-progress" data-width="95"></div>
          </div>
        </div>
      </div>
    </div>
    
    <div class="main-content">
      <section class="main-section" id="about">
        <h2 class="main-title">关于我</h2>
        <p class="about-content">
          我是一名拥有5年经验的Python开发工程师，专注于Web应用开发、数据分析和机器学习。我热爱编程，善于解决复杂问题，并且具有良好的团队合作精神。我追求代码的优雅和高效，不断学习新技术以提升自己的专业能力。
        </p>
        <div class="code-snippet">
          <pre><span class="keyword">class</span> <span class="class">PythonDeveloper</span>:
    <span class="keyword">def</span> <span class="function">__init__</span>(self):
        self.name = <span class="string">"张三"</span>
        self.skills = [<span class="string">"Python"</span>, <span class="string">"Django"</span>, <span class="string">"Flask"</span>, <span class="string">"FastAPI"</span>, <span class="string">"数据分析"</span>]
        self.experience = 5  <span class="comment"># 年</span>
        
    <span class="keyword">def</span> <span class="function">solve_problem</span>(self, problem):
        <span class="keyword">if</span> problem.complexity == <span class="string">"high"</span>:
            <span class="keyword">return</span> self.apply_advanced_techniques(problem)
        <span class="keyword">else</span>:
            <span class="keyword">return</span> self.apply_standard_solution(problem)
            
    <span class="keyword">def</span> <span class="function">learn_new_technology</span>(self, technology):
        self.skills.append(technology)
        <span class="keyword">return</span> <span class="string">f"已掌握{technology}技术"</span></pre>
        </div>
        
        <div class="metrics-container">
          <div class="metric-item">
            <div class="metric-value">5+</div>
            <div class="metric-label">年开发经验</div>
          </div>
          <div class="metric-item">
            <div class="metric-value">20+</div>
            <div class="metric-label">项目经验</div>
          </div>
          <div class="metric-item">
            <div class="metric-value">10+</div>
            <div class="metric-label">技术栈</div>
          </div>
          <div class="metric-item">
            <div class="metric-value">3+</div>
            <div class="metric-label">行业领域</div>
          </div>
        </div>
      </section>
      
      <section class="main-section" id="experience">
        <h2 class="main-title">工作经验</h2>
        <div class="timeline">
          <div class="timeline-item">
            <h3 class="timeline-title">高级Python开发工程师</h3>
            <h4 class="timeline-subtitle">ABC科技有限公司</h4>
            <p class="timeline-date">2021年6月 - 至今</p>
            <p class="timeline-content">
              负责公司核心业务系统的开发与维护，使用Python、Django和FastAPI构建高性能Web应用和API服务。主导了数据分析平台的设计与实现，集成了机器学习算法，提供智能推荐功能。优化了系统架构，提升了性能和可扩展性，减少了50%的响应时间。
            </p>
          </div>
          
          <div class="timeline-item">
            <h3 class="timeline-title">Python开发工程师</h3>
            <h4 class="timeline-subtitle">XYZ信息技术有限公司</h4>
            <p class="timeline-date">2018年7月 - 2021年5月</p>
            <p class="timeline-content">
              参与开发企业级Web应用和内部工具，使用Python、Flask和SQLAlchemy构建后端服务。实现了自动化测试和持续集成流程，提高了代码质量和开发效率。负责数据库设计和优化，提升了查询性能和系统稳定性。
            </p>
          </div>
        </div>
      </section>
      
      <section class="main-section" id="education">
        <h2 class="main-title">教育背景</h2>
        <div class="timeline">
          <div class="timeline-item">
            <h3 class="timeline-title">计算机科学与技术 硕士</h3>
            <h4 class="timeline-subtitle">北京大学</h4>
            <p class="timeline-date">2016 - 2018</p>
            <p class="timeline-content">
              主修人工智能与数据分析，GPA 3.8/4.0。参与了多个研究项目，包括基于深度学习的自然语言处理和计算机视觉应用。获得优秀毕业生称号和学术奖学金。
            </p>
          </div>
          
          <div class="timeline-item">
            <h3 class="timeline-title">软件工程 学士</h3>
            <h4 class="timeline-subtitle">清华大学</h4>
            <p class="timeline-date">2012 - 2016</p>
            <p class="timeline-content">
              主修软件开发与工程管理，GPA 3.7/4.0。参与了校企合作项目，开发了校园信息管理系统。获得三好学生称号和编程竞赛奖项。
            </p>
          </div>
        </div>
      </section>
      
      <section class="main-section" id="projects">
        <h2 class="main-title">项目经验</h2>
        <div class="project-grid">
          <div class="project-card">
            <div class="project-content">
              <h3 class="project-title">智能数据分析平台</h3>
              <div class="project-tech">
                <span class="tech-tag">Python</span>
                <span class="tech-tag">Django</span>
                <span class="tech-tag">React</span>
                <span class="tech-tag">Pandas</span>
                <span class="tech-tag">Scikit-learn</span>
              </div>
              <p class="project-description">
                设计并开发了一个企业级数据分析平台，实现了数据的采集、清洗、分析和可视化展示。集成了机器学习算法，提供智能推荐和预测功能，开发了可定制的报表系统，满足不同业务部门的需求。该项目提高了数据分析效率80%，为企业决策提供了有力支持。
              </p>
            </div>
          </div>
          
          <div class="project-card">
            <div class="project-content">
              <h3 class="project-title">高性能API服务</h3>
              <div class="project-tech">
                <span class="tech-tag">Python</span>
                <span class="tech-tag">FastAPI</span>
                <span class="tech-tag">PostgreSQL</span>
                <span class="tech-tag">Redis</span>
                <span class="tech-tag">Docker</span>
              </div>
              <p class="project-description">
                使用FastAPI和异步编程模型开发了高性能API服务，支持每秒处理上千请求。实现了完善的缓存策略和数据库优化，大幅提升了系统响应速度。采用Docker容器化部署，配置了自动扩展和负载均衡，确保系统在高并发场景下的稳定性。
              </p>
            </div>
          </div>
          
          <div class="project-card">
            <div class="project-content">
              <h3 class="project-title">自动化测试框架</h3>
              <div class="project-tech">
                <span class="tech-tag">Python</span>
                <span class="tech-tag">Pytest</span>
                <span class="tech-tag">Selenium</span>
                <span class="tech-tag">Jenkins</span>
                <span class="tech-tag">GitHub Actions</span>
              </div>
              <p class="project-description">
                设计并实现了一套完整的自动化测试框架，包括单元测试、集成测试和端到端测试。集成了持续集成流程，实现了代码提交后的自动测试和报告生成。该框架将测试时间缩短了70%，显著提高了代码质量和开发效率。
              </p>
            </div>
          </div>
        </div>
      </section>
    </div>
  </div>

  <script>
    // 主题切换
    const themeSwitch = document.getElementById('themeSwitch');
    const body = document.body;
    
    themeSwitch.addEventListener('click', () => {
      body.classList.toggle('dark-mode');
      themeSwitch.textContent = body.classList.contains('dark-mode') ? '🌞' : '🌓';
      
      // 保存用户偏好
      localStorage.setItem('darkMode', body.classList.contains('dark-mode'));
    });
    
    // 检查用户之前的偏好
    if (localStorage.getItem('darkMode') === 'true') {
      body.classList.add('dark-mode');
      themeSwitch.textContent = '🌞';
    }
    
    // 技能进度条动画
    function animateSkillBars() {
      const skillBars = document.querySelectorAll('.skill-progress');
      skillBars.forEach(bar => {
        const width = bar.getAttribute('data-width') + '%';
        setTimeout(() => {
          bar.style.width = width;
        }, 300);
      });
    }
    
    // 滚动动画
    function handleScroll() {
      const sections = document.querySelectorAll('.main-section');
      sections.forEach(section => {
        const sectionTop = section.getBoundingClientRect().top;
        const windowHeight = window.innerHeight;
        
        if (sectionTop < windowHeight * 0.75) {
          section.classList.add('visible');
        }
      });
    }
    
    // 创建粒子背景
    function createParticles() {
      const particlesContainer = document.getElementById('particles');
      const particleCount = 30;
      
      for (let i = 0; i < particleCount; i++) {
        const particle = document.createElement('div');
        particle.classList.add('particle');
        
        // 随机大小
        const size = Math.random() * 5 + 2;
        particle.style.width = size + 'px';
        particle.style.height = size + 'px';
        
        // 随机位置
        const posX = Math.random() * 100;
        const posY = Math.random() * 100;
        particle.style.left = posX + '%';
        particle.style.top = posY + '%';
        
        // 随机动画
        const duration = Math.random() * 20 + 10;
        const delay = Math.random() * 5;
        
        particle.style.animation = `floating ${duration}s ease-in-out ${delay}s infinite`;
        particle.style.opacity = Math.random() * 0.5 + 0.1;
        
        particlesContainer.appendChild(particle);
      }
    }
    
    // 鼠标跟随效果
    let mouseX = 0, mouseY = 0;
    let cursorX = 0, cursorY = 0;
    
    document.addEventListener('mousemove', (e) => {
      mouseX = e.clientX;
      mouseY = e.clientY;
    });
    
    function animateCursor() {
      // 平滑跟随效果
      cursorX += (mouseX - cursorX) * 0.1;
      cursorY += (mouseY - cursorY) * 0.1;
      
      // 更新粒子容器的视觉效果
      const particles = document.querySelectorAll('.particle');
      particles.forEach(particle => {
        const rect = particle.getBoundingClientRect();
        const particleX = rect.left + rect.width / 2;
        const particleY = rect.top + rect.height / 2;
        
        const distX = cursorX - particleX;
        const distY = cursorY - particleY;
        const distance = Math.sqrt(distX * distX + distY * distY);
        
        if (distance < 100) {
          const scale = 1 + (100 - distance) / 200;
          particle.style.transform = `scale(${scale})`;
          particle.style.opacity = Math.min(0.8, parseFloat(particle.style.opacity) + 0.1);
        } else {
          particle.style.transform = 'scale(1)';
          particle.style.opacity = Math.max(0.1, parseFloat(particle.style.opacity) - 0.02);
        }
      });
      
      requestAnimationFrame(animateCursor);
    }
    
    // 初始化
    window.addEventListener('load', () => {
      animateSkillBars();
      handleScroll();
      createParticles();
      animateCursor();
      
      // 初始显示第一个部分
      document.querySelector('.main-section').classList.add('visible');
      
      // 添加浮动动画样式
      const styleSheet = document.styleSheets[0];
      styleSheet.insertRule(`
        @keyframes floating {
          0% { transform: translateY(0px); }
          50% { transform: translateY(-10px); }
          100% { transform: translateY(0px); }
        }
      `, styleSheet.cssRules.length);
    });
    
    window.addEventListener('scroll', handleScroll);
  </script>
</body>
</html>